//package com.zm.demo.core.file;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.NumberUtil;
//import cn.hutool.core.util.StrUtil;
//import com.alibaba.excel.EasyExcel;
//import com.alibaba.excel.annotation.ExcelProperty;
//import com.alibaba.excel.context.AnalysisContext;
//import com.alibaba.excel.event.AnalysisEventListener;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.junit.Test;
//
//import java.io.File;
//import java.io.Serializable;
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.Comparator;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @Desc:
// * @author: w01005
// * @Date: 2022/7/26 17:00
// */
//@Slf4j
////@RunWith(SpringRunner.class)
////@SpringBootTest(classes = HuixinApplication.class)
//public class NewExcelDemo {
//
//    @Test
//    public void easyExcel() {
//        long beginTime = System.currentTimeMillis();
//        String path = "D:\\zm\\工作\\08\\20220801-20220805\\20220801-20220805";
//        String systemName = "nct";
//        String errorCodeMsgFilePath = "D:\\zm\\工作\\错误码文案.xlsx";
//
//        List<ErrorCodeMessage> codeMessageList = getErrorCodeByReadExcel(errorCodeMsgFilePath);
//        Map<String,String> errorCodeMap = codeMessageList.stream().collect(Collectors.toMap(ErrorCodeMessage::getErrorCode,
//                ErrorCodeMessage::getErrorMessage));
//
//        //所有路径下所有的文件
//        List<String> fileAbsolutePath = getFileAbsolutePathList(path);
//
//        //数据解析DTO
//        List<ExcelDataDto> list = new ArrayList<>();
//        for (String s : fileAbsolutePath) {
//            //读Excel
//            List<ExcelDataDto> excelData = readExcel(s);
//            //去掉无用数据
//            excelData = CollUtil.sub(excelData,2,excelData.size()+1);
//            list.addAll(excelData);
//        }
//        //去除空异常码
//        list = list.stream().filter(p-> StrUtil.isNotBlank(p.getErrorCode())).collect(Collectors.toList());
//
//        //分组
//        Map<String,List<ExcelDataDto>> map = list.stream().collect(Collectors.groupingBy(p-> p.getInterfaceName()+ "_" + p.getErrorCode()));
//
//        //converTo统计后的数据
//        List<ExcelDataWrite> excelDataStatistics = getExcelDataByCode(map,errorCodeMap);
//        //排序
//        excelDataStatistics = excelDataStatistics.stream().sorted(Comparator.comparing(ExcelDataWrite::getIntName)).collect(Collectors.toList());
//
//        String fileName = path.concat("\\").concat(systemName).concat(".xlsx");
//
//        EasyExcel.write(fileName, ExcelDataWrite.class)
//                .sheet(systemName)
//                .doWrite(excelDataStatistics);
//        //执行时长(毫秒)
//        long time = System.currentTimeMillis() - beginTime;
//        log.info("执行耗时：{}",time);
//
//    }
//
//    private List<ErrorCodeMessage> getErrorCodeByReadExcel(String errorCodeMsgFilePath){
//        List<ErrorCodeMessage> list = new ArrayList<>();
//        EasyExcel.read(errorCodeMsgFilePath, ErrorCodeMessage.class,
//                new AnalysisEventListener<ErrorCodeMessage>() {
//                    @Override
//                    public void invoke(ErrorCodeMessage o, AnalysisContext analysisContext) {
//                        list.add(o);
//                    }
//
//                    @Override
//                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//                    }
//                }).sheet(0).doRead();
//
//        return list.stream().distinct().collect(Collectors.toList());
//    }
//
//    private List<ExcelDataDto> readExcel(String filePath){
//        List<ExcelDataDto> list = new ArrayList<>();
////        String readFilePath = "C:\\Users\\w01005\\Desktop\\金融云核心Error日志导出_20220709000100_533184.xlsx";
//        EasyExcel.read(filePath, ExcelDataDto.class,
//                new AnalysisEventListener<ExcelDataDto>() {
//                    @Override
//                    public void invoke(ExcelDataDto o, AnalysisContext analysisContext) {
////                        log.info("读取到一条数据:{}", o);
//                        list.add(o);
//                    }
//
//                    @Override
//                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
////                        log.info("读取数据完成......");
//                    }
//                }).sheet(1).doRead();
//
////        log.info("读取到的数据条数:{}", list.size());
//        return list;
//    }
//
//    @Data
//    public static class ExcelDataDto implements Serializable {
//        private String interfaceName;
//        private String errorCode;
//        private String count;
//    }
//
//    @Data
//    public static class ExcelDataWrite implements Serializable {
//        @ExcelProperty("接口名")
//        private String intName;
//        @ExcelProperty("异常码")
//        private String errorCode;
//        @ExcelProperty("异常描述")
//        private String errorMessage;
//        @ExcelProperty("统计次数")
//        private BigDecimal count;
//    }
//
//
//    @Data
//    public static class ErrorCodeMessage implements Serializable {
//        private String errorCode;
//        private String errorMessage;
//        private String sysName;
//
//    }
//
//    private List<String> getFileAbsolutePathList(String filePath){
//        File file = new File(filePath);
//        File[] files = file.listFiles();
//
//        //所有文件的绝对路径
//        List<String> fileAbsolutePath = new ArrayList<>();
//        for (File s : files) {
//            if(s.isFile()){
//                fileAbsolutePath.add(s.getAbsolutePath());
//            }
//        }
//        return fileAbsolutePath;
//    }
//
//    private List<ExcelDataWrite> getExcelDataByCode(Map<String,List<ExcelDataDto>> map, Map<String,String> errorCodeMap) {
//        List<ExcelDataWrite> list = new ArrayList<>();
//        for (Map.Entry<String, List<ExcelDataDto>> entry : map.entrySet()) {
//            String[] array = StrUtil.split(entry.getKey(),"_");
//            String intName = array[0];
//            String code = array[1];
//            List<ExcelDataDto> parseRepayList =  entry.getValue();
//            BigDecimal c = BigDecimal.ZERO;
//            for (ExcelDataDto excelDataDto : parseRepayList) {
//                c = NumberUtil.add(c,new BigDecimal(excelDataDto.getCount()));
//            }
//            ExcelDataWrite excelDataWrite = new ExcelDataWrite();
//            String errorMessage = StrUtil.isNotBlank(errorCodeMap.get(code)) ? errorCodeMap.get(code) : null;
//            excelDataWrite.setIntName(intName);
//            excelDataWrite.setErrorCode(code);
//            excelDataWrite.setErrorMessage(errorMessage);
//            excelDataWrite.setCount(c);
//            list.add(excelDataWrite);
//        }
//
//        return list;
//    }
//}
//
//